package 数组算法;

public class maxAreaOfIsland695 {
    /**
     * 岛屿面积最大的问题
     *
     * @param grid
     * @return
     */
    // 表示四个方向
    int[] dx = {1, 0, -1, 0};
    int[] dy = {0, 1, 0, -1};

    /**
     * 最大岛屿面积
     *
     * @param grid
     * @return
     */
    public int maxAreaOfIsland(int[][] grid) {
        int res = 0;
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                if (grid[i][j] == 1) {
                    int area = dfs(grid, i, j);
                    res = Math.max(res, area);
                }
            }
        }
        return res;
    }

    private int dfs(int[][] grid, int i, int j) {
        // 排除的范围不在内部的情况
        if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length) {
            return 0;
        }
        //排除 0 和2的数字
        if (grid[i][j] != 1) {
            return 0;
        }
        // 只能是1的时候
        grid[i][j] = 2;
        int sum = 1;
        // 剩下的就是等于的0的数字
        for (int k = 0; k < 4; k++) {
            int new_i = dx[k] + i;
            int new_j = dy[k] + j;
            sum += dfs(grid, new_i, new_j);
        }
        return sum;
    }
}
